<?php
/**
 * Implementa��o do padr�o DAO para a classe Material.
 * Essas fun��es n�o devem ser chamadas diretamente, sendo seu uso feito via a classe Material.
*/

//if( !function_exists('__autoload') )
//{
//    function __autoload($class_name) {
//    require_once $class_name . '.php';
//    }
//}

require_once 'Material.php';
class MaterialDAO
{
	private $database;

    public function __construct( )
    {
		$this->database = DataAccess::getConnection();
	}
      
	public function Salvar( $material )
    {
	$especificacao = urldecode($material->especificacao);
	$medida = $material->medida[0]['unidadeFornecimento'].'|'.$material->medida[0]['sigla'].'|'.$material->medida[0]['capacidade'].'|'.$material->medida[0]['unidadeMedida'];

    	$consulta = $this->database->Fetch("BEGIN");

    	if ( $consulta )
    	{
    		$consulta = $this->database->Fetch("INSERT INTO t_material(
    											t_compra_id, 
    											codigo,
    											especificacao,
    											quantidade,
    											medida,
    											valor,
    											grupo)
                                            VALUES (
    										$material->compraId, 
                                            $material->codigo, 
                                            '$especificacao',
                                            $material->quantidade,
                                            '$medida',
                                            $material->valor,
                                            $material->grupo
                                            ) ");
           
            if( $consulta  && mysql_affected_rows() > 0  )
            {
            	$id = DataAccess::getId();
            	$consulta = $this->database->Fetch("COMMIT");
            	
            	return $id;
            }
            else
            {
            	$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
            }
    	}
    	else
    	{
    		$consulta = $this->database->Fetch("ROLLBACK");
            return FALSE;
    	}	
	}

        public function BuscarMaterialCatMatPorNome($nomeMaterial){
           
            $nomeMaterial = strtolower($nomeMaterial);
            $consulta = $this->database->Fetch("SELECT * FROM t_catmat WHERE LOWER(descricao) LIKE '%$nomeMaterial%'");
            if( $consulta != FALSE && mysql_num_rows( $consulta ) > 0){
                $resultado = $this->database->getRow();
                $materiais = array();
		for($i = 0; $i < count($resultado); $i++ )
			{
                                $unidadesFornecimento = array();					  
				
				//$descricaoMaterial =  $resultado[$i]['descricao'];
				//$descricaoMaterial = substr($descricaoMaterial, 1, strlen($descricaoMaterial)-3);
				$m = new Material( 0, $resultado[$i]['cod_material'], strtolower($resultado[$i]['descricao']), $unidadesFornecimento, 0, 0);
				$materiais[] = $m;
			}
			
		return $materiais;
                //return $resultado;
            }else{
		return array();
            }
        }

        public function BuscarMaterialCatMatPorCodigo($codMaterial){
            $nomeMaterial = strtolower($nomeMaterial);
            $consulta = $this->database->Fetch("SELECT * FROM t_catmat WHERE cod_material = '$codMaterial'");
            if( $consulta != FALSE && mysql_num_rows( $consulta ) > 0){
                $resultado = $this->database->getRow();
                $materiais = array();
		for($i = 0; $i < count($resultado); $i++ )
			{
                                $unidadesFornecimento = array();                            
				$descricaoMaterial =  $resultado[$i]['descricao'];
				//$descricaoMaterial = substr($descricaoMaterial, 1, strlen($descricaoMaterial)-3);
				$m = new Material( 0, $resultado[$i]['cod_material'], $resultado[$i]['descricao'], $unidadesFornecimento, 0, 0);
				$materiais[] = $m;
			}

		return $materiais;
                //return $resultado;
            }else{
		return array();
            }
        }

        public function SalvarNovoMaterialCatMat($catmat){
            $codMaterial = $catmat->codigo;
            $descricao = strtoupper($catmat->especificacao);
            $classe = $catmat->grupo;

            $consulta = $this->database->Fetch("SELECT * FROM t_catmat WHERE cod_material = '$codMaterial'");
            if(!$consulta || ($consulta && !mysql_num_rows( $consulta ) > 0)){
                
                $consulta = $this->database->Fetch("BEGIN");

                if ( $consulta )
                {
                        $consulta = $this->database->Fetch("INSERT INTO t_catmat (descricao, cod_material, classe) VALUES ('$descricao', '$codMaterial', '$classe')");

                    if( $consulta  && mysql_affected_rows() > 0  )
                    {
                        $id = DataAccess::getId();
                        $consulta = $this->database->Fetch("COMMIT");
                        return $id;
                    }
                    else
                    {
                        $consulta = $this->database->Fetch("ROLLBACK");
                        return FALSE;
                    }
                }
                else
                {
                        $consulta = $this->database->Fetch("ROLLBACK");
                    return FALSE;
                }
            }else{
                return FALSE;
            }
        }

	public function SalvarServico($material){
		
	
    	$consulta = $this->database->Fetch("BEGIN");
		$medida = $material->medida[0];
		
    	if ( $consulta )
    	{
    		$consulta = $this->database->Fetch("INSERT INTO t_material(
    											t_compra_id, 
    											especificacao,
    											quantidade,
    											medida,
    											valor)
                                            VALUES (
    										$material->compraId, 
                                            '$material->especificacao',
                                            $material->quantidade,
                                            '$medida',
                                            $material->valor
                                            ) ");
       
            if( $consulta  && mysql_affected_rows() > 0  )
            {
            	$id = DataAccess::getId();
            	$consulta = $this->database->Fetch("COMMIT");
            	
            	return $id;
            }
            else
            {
            	$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
            }
    	}
    	else
    	{
    		$consulta = $this->database->Fetch("ROLLBACK");
            return FALSE;
    	}	
	}
	
	public function Atualizar( $material )
	{	
		$consulta = $this->database->Fetch("BEGIN");
		
		$especificacao = urldecode($material->especificacao);
                $medida = $material->medida[0]['unidadeFornecimento'].'|'.$material->medida[0]['sigla'].'|'.$material->medida[0]['capacidade'].'|'.$material->medida[0]['unidadeMedida'];

                if ( $consulta )
                {
                                $consulta = $this->database->fetch("UPDATE t_material SET
                                                                                                t_compra_id = '$material->compraId',
                                                                                                codigo = '$material->codigo' ,
                                                                                                especificacao = '$especificacao',
                                                                                                quantidade = '$material->quantidade' ,
                                                                                                medida = '$medida',
                                                                                                valor = '$material->valor',
                                                                                                grupo = '$material->grupo'
                                                                                                WHERE t_material.id = $material->id
                                                                                                ");

                                if( $consulta )
                    {
                        $consulta = $this->database->Fetch("COMMIT");
                        return TRUE;
                    }
                    else
                    {
                        $consulta = $this->database->Fetch("ROLLBACK");
                        return FALSE;
                    }
        }
        else
        {
          	$consulta = $this->database->Fetch("ROLLBACK");
           	return FALSE;
        }

	}
	
	public function AtualizarServico($material){
		$consulta = $this->database->Fetch("BEGIN");
		$medida = $material->medida[0];
    	if ( $consulta )
    	{
			$consulta = $this->database->fetch("UPDATE t_material SET
											t_compra_id = '$material->compraId',
											especificacao = '$material->especificacao',
											quantidade = '$material->quantidade' , 
											medida = '$medida',
											valor = '$material->valor'
											WHERE t_material.id = $material->id 
											");


			if( $consulta )
            {
            	$consulta = $this->database->Fetch("COMMIT");
            	return TRUE;
            }
            else
            {
            	$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
            }
        }
        else
        {
          	$consulta = $this->database->Fetch("ROLLBACK");
           	return FALSE;
        }
	}
	
	public function Remover( $id )
	{
		$consulta = $this->database->Fetch("BEGIN");
		
		if( $consulta )
        {
           	$consulta = $this->database->Fetch("DELETE FROM t_material WHERE t_material.id = $material->id");

           	if( $consulta  )
            {
            	$consulta = $this->database->Fetch("COMMIT");
            	return TRUE;
            }
            else
            {
            	$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
            }
        }
    	else
        {
           	$consulta = $this->database->Fetch("ROLLBACK");
           	return FALSE;
        }
    	
	}
	
	public function RemoverPorProcesso( $processoId ){
		$consulta = $this->database->Fetch("BEGIN");
		
		if( $consulta )
        {
           	$consulta = $this->database->Fetch("DELETE FROM t_material WHERE t_compra_id = $processoId");

           	if( $consulta  )
            {
            	$consulta = $this->database->Fetch("COMMIT");
            	return TRUE;
            }
            else
            {
            	$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
            }
        }
    	else
        {
           	$consulta = $this->database->Fetch("ROLLBACK");
           	return FALSE;
        }
	}
	
	public function CarregarMateriaisPorProcesso( $processoId )
	{
		$consulta = $this->database->Fetch("SELECT * FROM t_material WHERE t_compra_id = $processoId ");
		
		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0)
        {
            $resultado = $this->database->getRow();
            $objetos = Material::ArrayParaObjetos( $resultado ); // transforma os registros retornados pela consulta em objetos
			
        	for( $i = 0; $i < count($objetos); $i++ )
			{
				$objetos[$i]->compraId = $processoId;
			}
            return $objetos;
		}
		else
			return FALSE;
	}
	
	public function CarregarMaterialPorId( $materialId )
	{
		$consulta = $this->database->Fetch("SELECT * FROM t_material WHERE id = $materialId ");
		
		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0)
        {
            $resultado = $this->database->getRow();
            $objetos = Material::ArrayParaObjetos( $resultado ); // transforma os registros retornados pela consulta em objetos
			
        	return $objetos[0];
		}
		else
			return FALSE;
	}
	
	
	
	
	
	
	
	
	
	
	
	
	public function Carregar( $materialId )
	{

    	$consulta = $this->database->Fetch("SELECT m.*, 
    											mu.valor, 
    											um.id as unidade_id, 
    											um.sigla, 
    											um.capacidade, 
    											um.medida, 
    											mu.id as id_material_unidade,
                                                c.nome as t_categoria_nome
                                                FROM t_material_unidade mu,
                                                t_material m,
                                                t_unidade_medida um,
                                                t_categoria c
                                                WHERE m.id = $materialId AND
                                                c.id = m.t_categoria_id AND
                                                mu.t_material_id = $materialId AND
                                                mu.t_unidade_medida_id = um.id");
    	
    	if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0)
        {
            $resultado = $this->database->getRow();
            $objetos = Material::ArrayParaObjetos( $resultado ); // transforma os registros retornados pela consulta em objetos

            return $objetos[0];
		}
		else
		{
			return FALSE;
		}	
	}
	
	public function CarregarMaterialPorMaterialUnidade( $materialUnidadeId )
	{
		$consulta = $this->database->Fetch("SELECT m.*, 
    											mu.valor, 
    											um.id as unidade_id, 
    											um.sigla, 
    											um.capacidade, 
    											um.medida, 
    											mu.id as id_material_unidade,
                                                c.nome as t_categoria_nome
                                                FROM t_material_unidade mu,
                                                t_material m,
                                                t_unidade_medida um,
                                                t_categoria c
                                                WHERE mu.id = $materialUnidadeId AND
                                                c.id = m.t_categoria_id AND
                                                m.id = mu.t_material_id AND
                                                mu.t_unidade_medida_id = um.id");
    	
    	if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0)
        {
            $resultado = $this->database->getRow();
            $objetos = Material::ArrayParaObjetos( $resultado ); // transforma os registros retornados pela consulta em objetos

            return $objetos[0];
		}
		else
		{
			return FALSE;
		}	
	}
	
	public function CarregarTodos( $listarTodos )
	{
		if( $listarTodos )
			$consulta = $this->database->Fetch("SELECT m.*, 
													mu.valor, 
													um.id as unidade_id, 
													um.sigla, 
													um.capacidade, 
													um.medida, 
													c.nome as t_categoria_nome, 
													mu.id as id_material_unidade
                                                   	FROM t_material_unidade mu,
                                                   	t_material m,
                                                   	t_unidade_medida um,
                                                   	t_categoria c
                                                   	WHERE m.id = mu.t_material_id AND
                                                   	c.id = m.t_categoria_id AND
                                                   	um.id = mu.t_unidade_medida_id");
		else
			$consulta = $this->database->Fetch("SELECT m.*, 
												   mu.valor, 
												   um.id as unidade_id, 
												   um.sigla, 
												   um.capacidade, 
												   um.medida, 
												   c.nome as t_categoria_nome, 
												   mu.id as id_material_unidade
                                                   FROM t_material_unidade mu,
                                                   t_material m,
                                                   t_unidade_medida um,
                                                   t_categoria c
                                                   WHERE m.id = mu.t_material_id AND
                                                   c.id = m.t_categoria_id AND
                                                   um.id = mu.t_unidade_medida_id AND
                                                   m.cat_mat <> 0");
			
		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0)
        {
            $resultado = $this->database->getRow();
            $objetos = Material::ArrayParaObjetos( $resultado ); // transforma os registros retornados pela consulta em objetos
            return $objetos;
		}
		else
		{
			return FALSE;
		}	

	}
	
	public function CarregarMateriaisPorCategoria( $id, $listarTodos )
	{
		if( $listarTodos )
			$consulta = $this->database->Fetch("SELECT m.*, 
												mu.valor, 
												um.id as unidade_id, 
												um.sigla, 
												um.capacidade, 
												um.medida, 
												c.nome as t_categoria_nome, 
												mu.id as id_material_unidade
	                                            FROM t_material_unidade mu,
	                                            t_material m,
	                                            t_unidade_medida um,
	                                            t_categoria c
	                                            WHERE m.id = mu.t_material_id and
	                                            t_categoria_id = '$id' and
	                                            c.id = m.t_categoria_id and
	                                            um.id = mu.t_unidade_medida_id");
		else
			$consulta = $this->database->Fetch("SELECT m.*, 
												mu.valor, 
												um.id as unidade_id, 
												um.sigla, 
												um.capacidade, 
												um.medida, 
												c.nome as t_categoria_nome, 
												mu.id as id_material_unidade
	                                            FROM t_material_unidade mu,
	                                            t_material m,
	                                            t_unidade_medida um,
	                                            t_categoria c
	                                            WHERE m.id = mu.t_material_id AND
	                                            t_categoria_id = '$id' AND
	                                            c.id = m.t_categoria_id AND
	                                            um.id = mu.t_unidade_medida_id AND
	                                            m.cat_mat <> 0");
		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0)
        {
            $resultado = $this->database->getRow();
            $objetos = Material::ArrayParaObjetos( $resultado ); // transforma os registros retornados pela consulta em objetos
            return $objetos;
		}
		else
		{
			return FALSE;
		}	
	
	}
	
	public function CarregarMateriaisPorNome( $letras, $listarTodos )
	{
		if( $listarTodos )
			$consulta = $this->database->Fetch("SELECT m.*, 
												mu.valor, 
												um.id as unidade_id, 
												um.sigla, 
												um.capacidade, 
												um.medida, 
												c.nome as t_categoria_nome, 
												mu.id as id_material_unidade
	                                            FROM t_material_unidade mu,
	                                            t_material m,
	                                            t_unidade_medida um,
	                                            t_categoria c
	                                            WHERE m.nome like '%$letras%' AND
	                                            m.id = mu.t_material_id AND
	                                            c.id = m.t_categoria_id AND
	                                            um.id = mu.t_unidade_medida_id");
		else
			$consulta = $this->database->Fetch("SELECT m.*, 
												mu.valor, 
												um.id as unidade_id, 
												um.sigla, 
												um.capacidade, 
												um.medida, 
												c.nome as t_categoria_nome, 
												mu.id as id_material_unidade
	                                            FROM t_material_unidade mu,
	                                            t_material m,
	                                            t_unidade_medida um,
	                                            t_categoria c
	                                            WHERE m.nome like '%$letras%' AND
	                                            m.id = mu.t_material_id AND
	                                            c.id = m.t_categoria_id AND
	                                            um.id = mu.t_unidade_medida_id AND
	                                            m.cat_mat <> 0");
		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0)
        {
            $resultado = $this->database->getRow();
            $objetos = Material::ArrayParaObjetos( $resultado ); // transforma os registros retornados pela consulta em objetos
            return $objetos;
		}
		else
		{
			return FALSE;
		}	
			
	}
	
	public function CarregarMateriaisPorNomePorCategoria( $letras, $categoriaId, $listarTodos )
	{
		if( $listarTodos )
			$consulta = $this->database->Fetch("SELECT m.*, 
												mu.valor, 
												um.id as unidade_id, 
												um.sigla, 
												um.capacidade, 
												um.medida, 
												c.nome as t_categoria_nome, 
												mu.id as id_material_unidade
	                                            FROM t_material_unidade mu,
	                                            t_material m,
	                                            t_unidade_medida um,
	                                            t_categoria c
	                                            WHERE m.nome like '%$letras%' AND
	                                            t_categoria_id = '$categoriaId' AND
	                                            m.id = mu.t_material_id AND
	                                            c.id = m.t_categoria_id AND
	                                            um.id = mu.t_unidade_medida_id");
		else
			$consulta = $this->database->Fetch("SELECT m.*, 
												mu.valor, 
												um.id as unidade_id, 
												um.sigla, 
												um.capacidade, 
												um.medida, 
												c.nome as t_categoria_nome, 
												mu.id as id_material_unidade
	                                            FROM t_material_unidade mu,
	                                            t_material m,
	                                            t_unidade_medida um,
	                                            t_categoria c
	                                            WHERE m.nome like '%$letras%' AND
	                                            t_categoria_id = '$categoriaId' AND
	                                            m.id = mu.t_material_id AND
	                                            c.id = m.t_categoria_id AND
	                                            um.id = mu.t_unidade_medida_id AND
	                                            m.cat_mat <> 0");
		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0)
        {
            $resultado = $this->database->getRow();
            $objetos = Material::ArrayParaObjetos( $resultado ); // transforma os registros retornados pela consulta em objetos
            return $objetos;
		}
		else
		{
			return FALSE;
		}	
		
	}
	
	public function CarregarMateriaisPorCodigo( $codigo, $codigoAberto )
	{
		if( $codigoAberto == 0 )
			$consulta = $this->database->Fetch("SELECT m.*, 
    											mu.valor, 
    											um.id as unidade_id, 
    											um.sigla, 
    											um.capacidade, 
    											um.medida, 
    											mu.id as id_material_unidade,
                                                c.nome as t_categoria_nome
                                                FROM t_material_unidade mu,
                                                t_material m,
                                                t_unidade_medida um,
                                                t_categoria c
                                                WHERE m.cat_mat = $codigo AND
                                                c.id = m.t_categoria_id AND
                                                mu.t_material_id = m.id AND
                                                mu.t_unidade_medida_id = um.id AND
                                                m.cat_mat <> 0
											 ");
		else if( $codigoAberto == 1 )
			$consulta = $this->database->Fetch("SELECT m.*,
                                                c.nome as t_categoria_nome
                                                FROM t_material m,
                                                t_categoria c
                                                WHERE m.cat_mat = $codigo AND
                                                c.id = m.t_categoria_id AND
                                                m.cod_aberto <> 0");

		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0 )
        {
        	$resultado = $this->database->getRow();
            $objetos = Material::ArrayParaObjetos( $resultado );
            return $objetos[0];
        }
        else
        	return FALSE;
	}
	
	
	public function CarregarUnidadesMedida()
	{
		$consulta = $this->database->Fetch("SELECT * FROM t_unidade_medida");
		
		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0 )
        {
        	$resultado = $this->database->getRow();
        	$medidas = array();
        	for( $i = 0; $i < count($resultado); $i++ )
        	{
        		$medidas[] = $resultado[$i];
        	}
        	
        	return $medidas;
        }
        else
        {
        	return FALSE;
        }
	}
	
	public function CarregarUnidadeMedida( $id )
	{
		$consulta = $this->database->Fetch("SELECT * FROM t_unidade_medida WHERE id = '$id'");
		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0 )
        {
        	$resultado = $this->database->getRow();
        	$medida = $resultado[0];
        	
        	return $medida;
        }
        else
        {
        	return FALSE;
        }
	}
	
	public function isCodigoEmUso( $codigo )
	{

		$consulta = $this->database->Fetch("SELECT * FROM t_material WHERE cat_mat = '$codigo'");
		
		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0 )
		{
			return TRUE;
		}
		else
			return FALSE;
	}
	
	public function CarregarMaterialPorProcessoECodigo( $processoId, $codigoId, $medida ){
		
                $unidade = $medida[0]['unidadeFornecimento'].'|'.$medida[0]['sigla'].'|'.$medida[0]['capacidade'].'|'.$medida[0]['unidadeMedida'];
					
		$consulta = $this->database->Fetch("SELECT * FROM t_material WHERE t_compra_id = $processoId AND codigo = $codigoId AND medida = '$unidade' ");
		
		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0)
        {
            $resultado = $this->database->getRow();
            $objetos = Material::ArrayParaObjetos( $resultado ); // transforma os registros retornados pela consulta em objetos
			$objetos[0]->compraId = $processoId;
                        $objetos[0]->tipo = "material";
			return $objetos[0];

		}
		else
			return FALSE;
	}
	
	public function CarregarServicoPorProcessoEspecificacaoEMaterial($processoId, $especificacao, $medida){
		$unidade = $medida[0];
		$consulta = $this->database->Fetch("SELECT * FROM t_material WHERE t_compra_id = $processoId AND especificacao = '$especificacao' AND medida = '$unidade'");
		
		if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0)
        {
        	$resultado = $this->database->getRow();
            $objetos = Material::ArrayParaObjetos( $resultado ); // transforma os registros retornados pela consulta em objetos
			$objetos[0]->compraId = $processoId;
                        $objetos[0]->tipo = "servico";
			return $objetos[0];

		}
		else
			return FALSE;
	}
      
}
?>
